#============================================================
#	Tab Container Side Bar
#============================================================
#  TabContainer 节点侧边栏
#============================================================
# @datetime: 2022-5-14 16:06:37
#============================================================
tool
class_name TabContainerSideBar
extends Node

const FoldButton_Scn = preload("fold_button/FoldButton.tscn")


var _tab_container : TabContainer

var _vbox : VBoxContainer
var _last_tab : int = 0
var _last_width : float = 0
var _last_min_width : float = 0

var _data := {}


#============================================================
#   Set/Get
#============================================================
func set_tab_container(tab_container: TabContainer):
	_tab_container = tab_container
	
	# 设置属性宽度等，默认宽度 170 太长了
	_last_min_width = _tab_container.rect_min_size.x
	_last_width = _tab_container.rect_size.x
	
	_tab_container.rect_min_size.x = 20
	_tab_container.rect_size.x = 100
	if not is_instance_valid(_vbox):
		_vbox = VBoxContainer.new()
	_tab_container.tabs_visible = false
	_last_tab = _tab_container.current_tab
	_tab_container.current_tab = _tab_container.get_tab_count() - 1


#============================================================
#   自定义
#============================================================
##  显示到节点上
## @tab_container  
func show_tab_container_node(node_list: Array):
	if not _vbox.is_inside_tree():
		_tab_container.add_child(_vbox)
	for child in node_list:
		var button = FoldButton_Scn.instance()
		var node_name = child.name
		button.hint_tooltip = node_name
		# 设置按钮点击后展示的节点
		button.set_panel(child)
		
		# 根据节点名设置图标
		match node_name:
			"FileSystem":
				button.icon = child.get_icon("Filesystem", "EditorIcons")
				button.text = "文件系统"
			"Scene":
				pass
			"":
				button.icon = null
		
		button.text = node_name
		_vbox.add_child(button)


##  还原
func restore():
	if _vbox == null:
		return
	for child in _vbox.get_children():
		if child.has_method("remove_panel"):
			child.remove_panel()
		child.queue_free()
	if _tab_container:
		_tab_container.rect_min_size.x = _last_min_width
		_tab_container.rect_size.x = _last_width
		_tab_container.current_tab = _last_tab
		_tab_container.tabs_visible = true
		_tab_container.remove_child(_vbox)

